{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DeepPurpose Deep Dive\n",
    "## Tutorial 2: Training a Drug Property Prediction Model from Scratch for Assay Data\n",
    "#### [@KexinHuang5](https://twitter.com/KexinHuang5)\n",
    "\n",
    "In this tutorial, we further extends the use cases of DeepPurpose to assay data where there are only drug information and its affinity score to the protein in the assay. \n",
    "\n",
    "Agenda:\n",
    "\n",
    "- Part I: Introduction to Assay Data\n",
    "- Part II: Drug Property Prediction\n",
    "\n",
    "Let's start!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from DeepPurpose import utils, dataset, CompoundPred\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Part I: Introduction to Assay Data\n",
    "\n",
    "Drug-target interaction measures the binding of drug molecules to the protein targets. In drug discovery process, we usually already have a protein of interest and traditionally, high-throughput screening assay is performed on a potential drug library to get affinity scores. But it is expensive and time-consuming, and it cannot go through a huge amount of molecule candidates, which means it potentially can miss a drug candidate. Machine learning can provide an important role to facilitate this process. One way to do it is to narrow down the search space for HTS. Here are the steps:\n",
    "\n",
    "1. For a target protein of interest, conduct an initial high-throughput screening assay on a set of drugs (ideally, structurally diverse), where the set size depends on the time and cost constraint.\n",
    "\n",
    "2. Train a deep learning model using DeepPurpose and select a threshold to control the false positive rate (e.g., < 0.02).\n",
    "\n",
    "3. Apply the trained model on a large set of drugs. Select the set of drugs that meet the threshold and send to HTS.\n",
    "\n",
    "Through the above three steps, it greatly cuts down the time of screening and also reduces the likelihood of missing a potential drug candidate. Now, we show the step 2: using DeepPurpose to train a deep learning model for screening the assay. \n",
    "\n",
    "(**Data**) DeepPurpose takes into an array of drug's SMILES strings (**d**) and an array of label (**y**), which can either be binary 0/1 indicating interaction outcome or a real number indicating affinity value. Note **y**\\[0\\] is the score for **d**\\[0\\].\n",
    "\n",
    "Besides transforming into numpy arrays through some data wrangling on your own, DeepPurpose also provides two ways to help data preparation. \n",
    "\n",
    "The first way is to read from local files. For example, to load drug assay data, we expect a file.txt where each line is a drug SMILES string, followed by an affinity score or 0/1 label:\n",
    "\n",
    "```CC1=C...C4)N  7.365```\n",
    "\n",
    "Then, we use ```dataset.read_file_training_dataset_bioassay``` to load it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drug 1: CCOC1=CC=C(C=C1)N2C=CC(=O)C(=N2)C(=O)NC3=CC=C(C=C3)S(=O)(=O)NC4=NC=CC=N4\n",
      "Score 1: 0.0\n"
     ]
    }
   ],
   "source": [
    "X_drugs, X_targets, y = dataset.read_file_training_dataset_bioassay('./toy_data/AID1706.txt')\n",
    "print('Drug 1: ' + X_drugs[0])\n",
    "print('Score 1: ' + str(y[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "DeepPurpose also provides data loaders to ease preprocessing. For example, in this tutorial, we will use the HIV screening data. We can use ```dataset.load_HIV```. It will download, preprocess to the designated data format. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Dataset already downloaded in the local system...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drug 1: CCC1=[O+][Cu-3]2([O+]=C(CC)C1)[O+]=C(CC)CC(CC)=[O+]2\n",
      "Score 1: 0\n"
     ]
    }
   ],
   "source": [
    "X_drugs, y, drugs_index = dataset.load_HIV(path = './data')\n",
    "print('Drug 1: ' + X_drugs[0])\n",
    "print('Score 1: ' + str(y[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For more detailed examples and tutorials of data loading, checkout this [tutorial](./DEMO/load_data_tutorial.ipynb).\n",
    "\n",
    "## Part II: Drug Property Prediction Framework\n",
    "\n",
    "DeepPurpose provides a simple framework to do drug property prediction research using 8 encoders for drugs. It basically consists of the following steps, where each step corresponds to one line of code:\n",
    "\n",
    "- Encoder specification\n",
    "- Data encoding and split\n",
    "- Model configuration generation\n",
    "- Model initialization\n",
    "- Model Training\n",
    "- Model Prediction and Repuposing/Screening\n",
    "- Model Saving and Loading\n",
    "\n",
    "Let's start with data encoding! \n",
    "\n",
    "(**Encoder specification**) After we obtain the required data format from Part I, we need to prepare them for the encoders. Hence, we first specify the encoder to use for drug and protein. Here we try MPNN for drug.\n",
    "\n",
    "If you find MPNN is too large for the CPUs, you can try smaller encoders by uncommenting the last line:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#drug_encoding = 'MPNN'\n",
    "drug_encoding = 'Morgan'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note that you can switch encoder just by changing the encoding name above. The full list of encoders are listed [here](https://github.com/kexinhuang12345/DeepPurpose#encodings). \n",
    "\n",
    "(**Data encoding and split**) Now, we encode the data into the specified format, using ```utils.data_process``` function. It specifies train/validation/test split fractions, and random seed to ensure same data splits for reproducibility. This function also support data splitting methods such as ```cold_drug```, which splits on drug for model robustness evaluation to test on unseen drug/proteins.\n",
    "\n",
    "The function outputs train, val, test pandas dataframes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drug Property Prediction Mode...\n",
      "in total: 41127 drugs\n",
      "encoding drug...\n",
      "unique drugs: 41127\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "RDKit WARNING: [09:01:53] WARNING: not removing hydrogen atom without neighbors\n",
      "RDKit WARNING: [09:01:53] WARNING: not removing hydrogen atom without neighbors\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Done.\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SMILES</th>\n",
       "      <th>Label</th>\n",
       "      <th>drug_encoding</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CCC1=[O+][Cu-3]2([O+]=C(CC)C1)[O+]=C(CC)CC(CC)...</td>\n",
       "      <td>0</td>\n",
       "      <td>[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                              SMILES  Label  \\\n",
       "0  CCC1=[O+][Cu-3]2([O+]=C(CC)C1)[O+]=C(CC)CC(CC)...      0   \n",
       "\n",
       "                                       drug_encoding  \n",
       "0  [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train, val, test = utils.data_process(X_drug = X_drugs, y = y, drug_encoding = drug_encoding,\n",
    "                                split_method='random',frac=[0.7,0.1,0.2],\n",
    "                                random_seed = 1)\n",
    "train.head(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "np.unique(y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(**Model configuration generation**) Now, we initialize a model with its configuration. You can modify almost any hyper-parameters (e.g., learning rate, epoch, batch size), model parameters (e.g. hidden dimensions, filter size) and etc in this function. The supported configurations are listed here in this [link](https://github.com/kexinhuang12345/DeepPurpose/blob/e169e2f550694145077bb2af95a4031abe400a77/DeepPurpose/utils.py#L486).\n",
    "\n",
    "For the sake of example, we specify the epoch size to be 3, and set the model parameters to be small so that you can run on both CPUs & GPUs quickly and can proceed to the next steps. For a reference parameters, checkout the notebooks in the DEMO folder."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "config = utils.generate_config(drug_encoding = drug_encoding, \n",
    "                         cls_hidden_dims = [1024,1024,512], \n",
    "                         train_epoch = 3, \n",
    "                         LR = 0.001, \n",
    "                         batch_size = 128,\n",
    "                         hidden_dim_drug = 128,\n",
    "                         mpnn_hidden_size = 128,\n",
    "                         mpnn_depth = 3\n",
    "                        )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(**Model initialization**) Next, we initialize a model using the above configuration."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<DeepPurpose.CompoundPred.Property_Prediction at 0x7fe9bbcf5090>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = CompoundPred.model_initialize(**config)\n",
    "model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(**Model Training**) Next, it is ready to train, using the ```model.train``` function! If you do not have test set, you can just use ```model.train(train, val)```. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Let's use CPU/s!\n",
      "--- Data Preparation ---\n",
      "--- Go for Training ---\n",
      "Training at Epoch 1 iteration 0 with loss 0.69454. Total time 0.0 hours\n",
      "Training at Epoch 1 iteration 100 with loss 0.11414. Total time 0.00138 hours\n",
      "Training at Epoch 1 iteration 200 with loss 0.17790. Total time 0.0025 hours\n",
      "Validation at Epoch 1 , AUROC: 0.78535 , AUPRC: 0.38694 , F1: 0.37810\n",
      "Training at Epoch 2 iteration 0 with loss 0.11183. Total time 0.00333 hours\n",
      "Training at Epoch 2 iteration 100 with loss 0.10962. Total time 0.00472 hours\n",
      "Training at Epoch 2 iteration 200 with loss 0.11443. Total time 0.00611 hours\n",
      "Validation at Epoch 2 , AUROC: 0.82523 , AUPRC: 0.47837 , F1: 0.46601\n",
      "Training at Epoch 3 iteration 0 with loss 0.08445. Total time 0.00666 hours\n",
      "Training at Epoch 3 iteration 100 with loss 0.14978. Total time 0.00805 hours\n",
      "Training at Epoch 3 iteration 200 with loss 0.11269. Total time 0.00944 hours\n",
      "Validation at Epoch 3 , AUROC: 0.84940 , AUPRC: 0.52009 , F1: 0.45989\n",
      "--- Go for Testing ---\n",
      "Testing AUROC: 0.7718187151198811 , AUPRC: 0.4290818621138395 , F1: 0.4144578313253012\n",
      "--- Training Finished ---\n"
     ]
    },
    {
     "data": {
      "image/png": "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tz42/YwzzqB79+4ATJs2jaeffvqkdfmNqob1I+b0s9Vf0tLST3j+4IOzdPz4pZqenuG3bRqTndWrVwc7BC1VqpQ2btxYDx8+rKqqM2bM0MaNG2uXLl08ryM1NdVf4amq6kUXXaR///235+X9HU9W/fv315deeklVVV966SV99NFHc11+9+7dWqFCBT106NBJ866++mp97733VFU1IyNDmzRpku1yqtl/foAlWsDzrlVV5WDevD/o3XsGY8d2pU2bGgAMHXpFkKMyBmoOmO6X9W56uUuey3Tu3Jnp06dz7bXXMmnSJHr27Mm3334LOL+m77zzTjZu3EjJkiUZN24cjRo1YtCgQWzYsIGNGzdSvXp1hg8fzo033shff/3FRRddxJw5c1i6dCkJCQl0796dLVu2kJycTL9+/bjnnnsAKF26NP369WPatGnExcXxxRdfULly5RNiW7t2LbGxsSQkJADwv//9j+eff56jR48SHx/Phx9+SOXKlbONp1evXmzevBmAN998k1atWrFo0SL69etHcnIycXFxTJgwgbp1T60984svvmD+/PkA3HbbbbRr145XXnklx+WnTJlCp06dKFmy5AnT9+/fz9dff82ECRMApzTYrl07pk2bxvXXX39KMXphVVVZ7Nx5iNtu+5z27d9nzZpdDB36Y7BDMiZk9OjRg8mTJ5OcnMyqVato0aLFsXnPPPMMTZs2ZdWqVbz44ovceuutx+atXr2auXPnMmnSJJ599lnat2/Pr7/+yrXXXnvshA3wzjvvsHTpUpYsWcLw4cPZvXs3AIcOHaJly5asXLmSNm3aMH78+JNi+/777zn//POPPb/44otZuHAhy5cvp0ePHrz66qvZxtOvXz8efPBBFi9ezH//+1/+9a9/AVCvXj2+/fZbli9fzuDBg3niiSdO2uaBAwdOqFbyfaxevfqk5Xfs2EGVKlUAOP3009mxY0eux3vy5Mn07NnzpOmff/45l156KWXLlj02rVmzZseSuL9ZicOVkaG8/fYyHntsLnv3JhMbG8mTT7ahf/9/BDs0Y07gpWTgL40aNWLTpk1MmjSJzp07nzDvu+++47///S8A7du3Z/fu3ezfvx+Abt26ERcXd2y5zz77DICOHTtSoUKFY+sYPnz4sXlbtmxh3bp1xMfHExMTc6wt5YILLmDOnDknxbZt2zZOO+20Y88T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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.train(train, val, test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We see that the model will automatically generate and plot the training process, along with the validation result and test result.\n",
    "\n",
    "(**Model Prediction and Repuposing/Screening**) Next, we see how we can predict affinity scores on new data. Suppose the new data is a new drug below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drug Property Prediction Mode...\n",
      "in total: 1 drugs\n",
      "encoding drug...\n",
      "unique drugs: 1\n",
      "do not do train/test split on the data for already splitted data\n",
      "predicting...\n",
      "The predicted score is [0.003792080795392394]\n"
     ]
    }
   ],
   "source": [
    "X_drug = ['CC1=C2C=C(C=CC2=NN1)C3=CC(=CN=C3)OCC(CC4=CC=CC=C4)N']\n",
    "X_pred = utils.data_process(X_drug = X_drug, y = y, drug_encoding = drug_encoding, split_method='no_split')\n",
    "y_pred = model.predict(X_pred)\n",
    "print('The predicted score is ' + str(y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also do repurposing/screening using the trained model. Basically, for repurposing/screening a set of new drugs (**r**), we run the above prediction function. We wrap the operation into a ```models.repurpose```.\n",
    "\n",
    "For example, suppose we want to do repurposing from a set of antiviral drugs for the COVID-19 target 3CL protease. The corresponding data can be retrieved using ```dataset``` functions.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Repurposing Drug 1 Name: Abacavir\n",
      "Repurposing Drug 1 SMILES: C1CC1NC2=C3C(=NC(=N2)N)N(C=N3)C4CC(C=C4)CO\n",
      "Repurposing Drug 1 Pubchem CID: 441300\n"
     ]
    }
   ],
   "source": [
    "r, r_name, r_pubchem_cid = dataset.load_antiviral_drugs()\n",
    "print('Repurposing Drug 1 Name: ' + r_name[0])\n",
    "print('Repurposing Drug 1 SMILES: ' + r[0])\n",
    "print('Repurposing Drug 1 Pubchem CID: ' + str(r_pubchem_cid[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, we can call the ```repurpose``` function. After feeding the necessary inputs, it will print a list of repurposed drugs ranked on its affinity to the target protein. The ```convert_y``` parameter should be set to be ```False``` when the ranking is ascending (i.e. lower value -> higher affinity) due to the log transformation, vice versus."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "repurposing...\n",
      "Drug Property Prediction Mode...\n",
      "in total: 82 drugs\n",
      "encoding drug...\n",
      "unique drugs: 81\n",
      "Done.\n",
      "predicting...\n",
      "---------------\n",
      "Drug Repurposing Result\n",
      "+------+----------------------+-------------+-------------+\n",
      "| Rank |      Drug Name       | Interaction | Probability |\n",
      "+------+----------------------+-------------+-------------+\n",
      "|  1   |      Zidovudine      |     YES     |     0.82    |\n",
      "|  2   |      Stavudine       |      NO     |     0.49    |\n",
      "|  3   |     Zalcitabine      |      NO     |     0.39    |\n",
      "|  4   |      Didanosine      |      NO     |     0.20    |\n",
      "|  5   |      Nevirapine      |      NO     |     0.19    |\n",
      "|  6   |    Fosamprenavir     |      NO     |     0.17    |\n",
      "|  7   |      Amprenavir      |      NO     |     0.10    |\n",
      "|  8   |      Pyrimidine      |      NO     |     0.07    |\n",
      "|  9   |    Emtricitabine     |      NO     |     0.06    |\n",
      "|  10  |     Tromantadine     |      NO     |     0.03    |\n",
      "checkout ./result/repurposing.txt for the whole list\n"
     ]
    }
   ],
   "source": [
    "y_pred = CompoundPred.repurpose(X_repurpose = r, model = model, drug_names = r_name)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Saving and loading models are also really easy. The loading function also automatically detects if the model is trained on multiple GPUs. To save a model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.save_model('./tutorial_model')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To load a saved/pretrained model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<DeepPurpose.CompoundPred.Property_Prediction at 0x7fe9bec77090>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = CompoundPred.model_pretrained(path_dir = './tutorial_model')\n",
    "model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We also provided more functionalities for DTI research purposes. \n",
    "\n",
    "For example, this [demo](https://github.com/kexinhuang12345/DeepPurpose/blob/master/DEMO/Drug_Property_Pred-Ax-Hyperparam-Tune.ipynb) shows how to use Ax platform to do some latest hyperparameter tuning methods such as Bayesian Optimization on DeepPurpose.\n",
    "\n",
    "They are described in details in tutorial 1 and in the github repository."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "That wraps up our tutorials on the main functionalities of DeepPurpose's Drug Property Prediction framework! \n",
    "\n",
    "Do checkout the previous & upcoming tutorials:\n",
    "\n",
    "Tutorial 1: Training a Drug-Target Interaction Model from Scratch\n",
    "\n",
    "Tutorial 3: Repurposing and Virtual Screening Using One Line of Code\n",
    "\n",
    "**Star & watch & contribute to DeepPurpose's [github repository](https://github.com/kexinhuang12345/DeepPurpose)!**\n",
    "\n",
    "Feedbacks would also be appreciated and you can send me an email (kexinhuang@hsph.harvard.edu)!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
